package com.cm.projectx.service.impl;


import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.cm.projectx.entity.Product;
import com.cm.projectx.entity.ProductInfo;
import com.cm.projectx.entity.dto.ProductDto;
import com.cm.projectx.entity.dto.ProductTypeDto;
import com.cm.projectx.mapper.ProductInfoMapper;
import com.cm.projectx.mapper.ProductMapper;
import com.cm.projectx.service.IProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

@Service
public class ProductServiceImpl implements IProductService {

    @Autowired
    private ProductInfoMapper productInfoMapper;


    @Override
    public List<ProductTypeDto> getProductList() {

        // 1. 查询所有商品类别 (selectRelated1757488454433 is null)
        LambdaQueryWrapper<ProductInfo> typeWrapper = Wrappers.lambdaQuery();
        typeWrapper.isNull(ProductInfo::getParentId); // pType字段为null表示是类别记录
        List<ProductInfo> productTypes = productInfoMapper.selectList(typeWrapper);

        // 转换为ID到类别名称的映射
        Map<String, String> typeIdToNameMap = productTypes.stream()
                .collect(Collectors.toMap(
                        ProductInfo::getId,
                        ProductInfo::getName
                ));
        // 2. 查询所有商品 (selectRelated1757488454433 is not null)
        LambdaQueryWrapper<ProductInfo> productWrapper = Wrappers.lambdaQuery();
        productWrapper.isNotNull(ProductInfo::getParentId); // pType字段不为null表示是商品记录
        List<ProductInfo> products = productInfoMapper.selectList(productWrapper);

        // 3. 按商品类别分组
        Map<String, ProductTypeDto> typeMap = new LinkedHashMap<>();

        for (ProductInfo product : products) {
            String typeId = product.getParentId();
            String typeName = typeIdToNameMap.get(typeId);

            if (typeName == null) {
                continue; // 跳过没有对应类别的商品
            }
            // 如果该类别尚未在map中，则创建新条目
            if (!typeMap.containsKey(typeName)) {
                ProductTypeDto typeDto = new ProductTypeDto();
                typeDto.setPType(typeName);
                typeDto.setProductList(new ArrayList<>());
                typeMap.put(typeName, typeDto);
            }

            ProductTypeDto typeDto = typeMap.get(typeName);
            // 创建商品DTO并添加到列表
            ProductDto productDto = new ProductDto();
            productDto.setId(product.getId());
            productDto.setPName(product.getName());
            productDto.setPLevel(product.getKind());
            productDto.setPCalc(product.getUnit());

            typeDto.getProductList().add(productDto);
        }
        return new ArrayList<>(typeMap.values());
    }
}
